home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1998 / MacHack 1998.toast / The Hacks! / Transport Independent Speech / SpokenSerialApp / Language.c next >
Encoding:
C/C++ Source or Header  |  1998-06-21  |  3.1 KB  |  97 lines  |  [TEXT/CWIE]

  1. #ifndef __LANGUAGE__
  2. #include "Language.h"
  3. #endif
  4.  
  5. OSErr        MakeNewLanguage        (SpeechInfoPtr theSpeechInfo)
  6. {
  7.     OSErr        theErr        = noErr;
  8.  
  9.     /* Make language models */
  10.     theErr = ReadInLanguages (theSpeechInfo);
  11.  
  12.     /* Use this LM in recognition */
  13.     if (theErr == noErr) {
  14.         theErr = SRSetLanguageModel (theSpeechInfo->theRecognizer, theSpeechInfo->languages->theLanguage);
  15.     }
  16.  
  17.     return theErr;
  18. }
  19.  
  20. OSErr    ReadInLanguages            (SpeechInfoPtr theSpeechInfo)
  21. {
  22.     LanguageModelListPtr    currentLang            = nil;
  23.     short                    numLanguages        = 1;
  24.     OSErr                    theErr                = noErr;
  25.  
  26.     theSpeechInfo->languages = (LanguageModelListPtr)NewPtr (sizeof (LanguageModelList));
  27.     theSpeechInfo->languages->nextLanguage = nil;
  28.     currentLang = theSpeechInfo->languages;
  29.  
  30.     theErr = AddStringsToLanguage (theSpeechInfo, currentLang, kBaseResID);
  31.     return theErr;
  32. }
  33.  
  34. OSErr    AddStringsToLanguage        (SpeechInfoPtr theSpeechInfo, LanguageModelListPtr currentLang, short resID)
  35. {
  36.     SRLanguageModel            newModel;
  37.     OSType                    type                = 0;
  38.     TREEResourcePtr            TREEResPtr            = nil;
  39.     CommandPtr                theCommand            = nil;
  40.     long                    refCon                = 0,
  41.                             flags                = 0,
  42.                             ID                    = 0;
  43.     short                    j                    = 1,
  44.                             onlySubPath            = false;
  45.     OSErr                    theErr                = noErr;
  46.     Boolean                    done                = false;
  47.  
  48.     theErr = SRNewLanguageModel (theSpeechInfo->recogSystem, &newModel, nil, 0);
  49.     refCon = 'hex ';
  50.     theErr = SRSetProperty (newModel, kSRRefCon, &refCon, sizeof (refCon));
  51.     /* add each phrase to LM */
  52.     refCon = refCon << 16;
  53.  
  54.     theErr = RegisterCommand (newModel, 0, 'hexd', 0, "digit zero");
  55.     theErr = RegisterCommand (newModel, 0, 'hexd', 1, "digit one");
  56.     theErr = RegisterCommand (newModel, 0, 'hexd', 2, "digit two");
  57.     theErr = RegisterCommand (newModel, 0, 'hexd', 3, "digit three");
  58.     theErr = RegisterCommand (newModel, 0, 'hexd', 4, "digit four");
  59.     theErr = RegisterCommand (newModel, 0, 'hexd', 5, "digit five");
  60.     theErr = RegisterCommand (newModel, 0, 'hexd', 6, "digit six");
  61.     theErr = RegisterCommand (newModel, 0, 'hexd', 7, "digit seven");
  62.     theErr = RegisterCommand (newModel, 0, 'hexd', 8, "digit eight");
  63.     theErr = RegisterCommand (newModel, 0, 'hexd', 9, "digit niner");
  64.     theErr = RegisterCommand (newModel, 0, 'hexd', 10, "digit alfa");
  65.     theErr = RegisterCommand (newModel, 0, 'hexd', 11, "digit bravo");
  66.     theErr = RegisterCommand (newModel, 0, 'hexd', 12, "digit charlie");
  67.     theErr = RegisterCommand (newModel, 0, 'hexd', 13, "digit delta");
  68.     theErr = RegisterCommand (newModel, 0, 'hexd', 14, "digit echo");
  69.     theErr = RegisterCommand (newModel, 0, 'hexd', 15, "digit foxtrot");
  70.  
  71.     if (theErr != noErr) {    /*    release newly created LM if an error occured while adding phrases */
  72.         SRReleaseObject (newModel);
  73.     }
  74.     else {                    /*    return new LM */
  75.     //We don't release the language models because we will be switching between them later
  76.         currentLang->theLanguage = newModel;
  77.     }
  78.  
  79.     return theErr;
  80. }
  81.  
  82. OSErr    RegisterCommand    (SRLanguageModel theModel, long flags, unsigned long type, long ID, const char* word)
  83. {
  84.     OSErr                theErr            = noErr;
  85.  
  86.     CommandPtr theCommand = (CommandPtr)NewPtr (sizeof(Command));
  87.  
  88.     theCommand->flags = flags;
  89.     theCommand->type = type;
  90.     theCommand->ID = ID;
  91.  
  92.     theErr = SRAddText (theModel, word, strlen(word), (long)theCommand);
  93.  
  94.     return theErr;
  95. }
  96.  
  97.